sub Stage3
{
	DeleteMusic(BGM[4]);
	PlayMusic(BGM[5]);
	CreateEnemyFromFile(csd~"stage3/LoadEnemy.txt",0,0,0,0,0);
	wait(120);
if(StagePhaseProgress==0)
{
	Stage3Unit1;
	wait(30);
	Stage3Unit2;
	wait(60);
	Stage3Unit3;
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy04.txt",GetCenterX,GetClipMinY-64,0.75,90,1);
	wait(360);
	Stage3Unit4;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX+96,GetClipMinY-32,0.75,90,1);
	wait(90);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-96,GetClipMinY-32,0.75,90,1);
	wait(60);
	Stage3Unit7;
	wait(60);
	Stage3Unit5;
	wait(60);
	Stage3Unit6;
	wait(60);
	Stage3Unit8;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-48,GetClipMinY-32,0.75,90,1);
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX+96,GetClipMinY-32,0.75,90,1);
	wait(60);

	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy06.txt",GetClipMinX-32,GetClipMinY+60,0.75,90,1);
	Hayamawasi1;
	wait(720);
	Stage3Unit9;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX-64,GetClipMinY-32,1,90,1);
	Stage3Unit2;
	wait(120);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX+64,GetClipMinY-32,1,90,1);
	Stage3Unit8;
	wait(120);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX-64,GetClipMinY-32,1,90,1);
	Stage3Unit2;
	wait(180);
	Stage3Unit10;
	wait(180);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy08.txt",GetCenterX+96,GetClipMinY-32,1,90,1);
	wait(120);
	Stage3Unit11;
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy08.txt",GetCenterX-96,GetClipMinY-32,1,90,1);
	wait(45);
	Stage3Unit11;
	wait(225);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy08.txt",GetCenterX,GetClipMinY-32,1,90,1);
	wait(120);
	Stage3Unit12;
	wait(120);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-96,GetClipMinY-32,0.75,90,1);
	wait(30);
	Stage3Unit13;
	wait(60);
	Stage3Unit2;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX+96,GetClipMinY-32,0.75,90,1);
	wait(60);
	Stage3Unit8;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-96,GetClipMinY-32,0.75,90,1);
	wait(60);
	Stage3Unit2;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX+96,GetClipMinY-32,0.75,90,1);
	wait(450);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
if(StagePhaseProgress<=1)
{
	SetCommonData("STAGE3MIDBOSS",true);
	SetCommonData("STAGE3MIDBOSSHAYAMAWASI",true);
	Hayamawasi2;
	CreateEnemyBossFromFile(csd~"stage3/Stage3MidBoss.txt",GetClipMaxX-60,GetClipMinY-16,2,0,0);

	WaitForZeroEnemy;
	SetCommonData("STAGE3MIDBOSS",false);
	BGStage3MidBossEnd;
	loop
	{
		if(GetCommonDataDefault("STAGE3MIDBOSSHAYAMAWASI",true)==false){break;}
		yield;
	}
	wait(60);
}
if(StagePhaseProgress<=2)
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX+100,GetClipMinY-32,1,90,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX+0,GetClipMinY-32,1,90,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX-100,GetClipMinY-32,1,90,1);
	wait(90);
	Stage3Unit14;
	Stage3Unit17;
	wait(90);
	Stage3Unit18;
	Stage3Unit15;
	wait(120);
	Stage3Unit16;
	Stage3Unit17;
	wait(120);
	Stage3Unit19;
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy10.txt",GetCenterX-100,GetClipMinY-32,0.5,90,1);
	wait(150);
	Stage3Unit16;
	wait(180);
	Stage3Unit20;
	wait(105);
	Stage3Unit21;
	wait(60);
	Stage3Unit22;
	wait(60);
	Stage3Unit23;
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy10.txt",GetCenterX+100,GetClipMinY-32,0.5,90,1);
	wait(60);
CreateEnemyFromFile(csd~"stage3/Stage3Enemy08.txt",GetCenterX-96,GetClipMinY-32,0.5,90,1);
	wait(120);
	Stage3Unit25;
	wait(30);
	Stage3Unit24;
	wait(30);
	//Stage3Unit22;
	wait(90);
	Stage3Unit26;
	wait(90);
	Stage3Unit20;
	wait(120);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy10.txt",GetCenterX,GetClipMinY-32,0.5,90,1);
	WaitForZeroEnemy;
	FadeOutMusic(BGM[5],10);
	wait(120);
}
//////////////////////////////////////////////////////////////////
if(StagePhaseProgress<=3)
{
	DeleteMusic(BGM[5]);
	PlayMusic(BGM[6]);
	SetCommonData("STAGE3BOSS",true);
	wait(1);
	CreateEnemyBossFromFile(csd~"stage3/Stage3Boss.txt",GetClipMaxX-60,GetClipMinY-16,2,0,0);
	WaitForZeroEnemy;
	SetCommonData("STAGE3BOSS",false);
	CreateEnemyFromFile(csd~"stage3/DeleteEnemy.txt",GetClipMinX-64,GetCenterY-48,2,90,1);
}
}

task Hayamawasi2
{
let count=0;
	loop(1200)
	{
		if(GetCommonDataDefault("STAGE3MIDBOSS",true)==false){break;}
		count+=1;
		yield;
	}
	loop
	{
		ascent(i in 0..12)
		{
		if(count==500+60*i)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX+40,GetClipMinY-32,2.5,90,0);
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX-120,GetClipMinY-32,2.5,90,0);
		}
		if(count==515+60*i)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX-80,GetClipMinY-32,2.5,90,0);
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX+80,GetClipMinY-32,2.5,90,0);
		}
		if(count==530+60*i)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX-40,GetClipMinY-32,2.5,90,0);
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX+120,GetClipMinY-32,2.5,90,0);
		}
		if(count==545+60*i)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX-80,GetClipMinY-32,2.5,90,0);
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetCenterX+80,GetClipMinY-32,2.5,90,0);
		}
		}
		if(count>=1200){break;}
	count+=1;
	yield;
	}
	SetCommonData("STAGE3MIDBOSSHAYAMAWASI",false);
}

task Hayamawasi1
{
let count=0;
	loop(720)
	{
		if(GetCommonDataDefault("STAGE3HAYAWAMASHI",false)){break;}
		count+=1;
		yield;
	}

	while(count<720)
	{
		if(count==90)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX+96,GetClipMinY-32,0.75,90,1);
		}
		if(count==180)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-0,GetClipMinY-32,0.75,90,1);
		}
		if(count==270)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-96,GetClipMinY-32,0.75,90,1);
		}
		if(count==360)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-0,GetClipMinY-32,0.75,90,1);
		}
		if(count==450)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX+96,GetClipMinY-32,0.75,90,1);
		}
		if(count==540)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX,GetClipMinY-32,0.75,90,1);
		}
		if(count==630)
		{
			CreateEnemyFromFile(csd~"stage3/Stage3Enemy05.txt",GetCenterX-96,GetClipMinY-32,0.75,90,1);
		}
	count+=1;
	yield;
	}
}


task Stage3Unit1
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy01.txt",GetCenterX-64,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy01.txt",GetCenterX-96,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy01.txt",GetCenterX-32,GetClipMinY-16,0,0,1);
}

task Stage3Unit2
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX+64,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX+96,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX+32,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX+128,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX+160,GetClipMinY-16,0,0,1);
}

task Stage3Unit3
{
let y=140;
	loop(6)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY-20+y,1.0,165,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY-60+y,1.0,165,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMinX-16,GetClipMinY+20+y,1.0,15,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMinX-16,GetClipMinY+60+y,1.0,15,1);
		wait(45);
		y+=12;
	}
}


task Stage3Unit4
{
let y=10;
	loop(8)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMinX-16,GetClipMinY-16+y,1.0,30,1);
		wait(45);
		y+=12;
	}
}

task Stage3Unit5
{
	loop(6)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Elemental.txt",GetCenterX+96,GetClipMinY-16,0,0,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Elemental.txt",GetCenterX+192,GetClipMinY-16,0,0,1);
	wait(10);
	}
}


task Stage3Unit6
{
	loop(6)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Elemental.txt",GetCenterX-96,GetClipMinY-16,0,0,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Elemental.txt",GetCenterX-192,GetClipMinY-16,0,0,1);
	wait(10);
	}
}

task Stage3Unit7
{
let y=30;
	loop(12)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY-16+y,1.0,150,1);
		wait(45);
		y+=12;
	}
}

task Stage3Unit8
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX-64,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX-96,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX-32,GetClipMinY-16,0,0,1);
	wait(10);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy02.txt",GetCenterX-128,GetClipMinY-16,0,0,1);
}

task Stage3Unit9
{
	loop(10)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX-128,GetClipMinY-16,1.0,90,1);
		wait(30);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX+128,GetClipMinY-16,1.0,90,1);
		wait(30);
	}
}

task Stage3Unit10
{
	loop(5)
	{
	ascent(i in -3..4)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Elemental.txt",GetCenterX+48*i,GetClipMinY-16,0,0,1);
	wait(5);
	}
	}
}

task Stage3Unit11
{
let x=-40;
let y=30;
	loop(9)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+x,GetClipMinY-16,1,90,1);
		wait(20);
		x-=40;
	}
}

task Stage3Unit12
{
	loop(4)
	{
	ascent(i in -3..4)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Elemental.txt",GetCenterX-48*i,GetClipMinY-16,0,0,1);
	wait(5);
	}
	}
}

task Stage3Unit13
{
	loop(9)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX+32,GetClipMinY-16,1,90,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX-32,GetClipMinY-16,1,90,1);
		wait(60);
	}
}

task Stage3Unit14
{
let y=0;
	loop(8)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetClipMaxX+16,GetClipMinY+64+y,4,165,1);
		wait(10);
		y+=4;
	}
}

task Stage3Unit15
{
let y=15;
	loop(8)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetClipMinX-16,GetClipMinY+64+y,4,10,1);
		wait(10);
		y+=4;
	}
}

task Stage3Unit16
{
let y=30;
	loop(10)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetClipMaxX+16,GetClipMinY+64+y,4,165,1);
		wait(10);
		y+=4;
	}
}

task Stage3Unit17
{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX+64,GetClipMinY-16,1,90,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX+144,GetClipMinY-16,1,90,1);
		wait(60);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX+104,GetClipMinY-16,1,90,1);
		wait(60);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX+64,GetClipMinY-16,1,90,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX+144,GetClipMinY-16,1,90,1);
}


task Stage3Unit18
{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX-64,GetClipMinY-16,1,90,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX-144,GetClipMinY-16,1,90,1);
		wait(60);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy07.txt",GetCenterX-104,GetClipMinY-16,1,90,1);
		wait(60);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX-64,GetClipMinY-16,1,90,1);
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetCenterX-144,GetClipMinY-16,1,90,1);
}

task Stage3Unit19
{
let y=45;
	loop(12)
	{
		CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetClipMinX-16,GetClipMinY+64+y,4,10,1);
		wait(10);
		y+=4;
	}
}

task Stage3Unit20
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMinX-32,GetClipMinY+100,1,30,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMaxX+32,GetClipMinY+100,1,150,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMinX-32,GetClipMinY+80,1,30,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMaxX+32,GetClipMinY+80,1,150,1);
}

task Stage3Unit21
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY+48,1,160,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY+80,1,160,1);
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY+48,1,160,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY+80,1,160,1);
	wait(60);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY+48,1,160,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX+16,GetClipMinY+80,1,160,1);
}

task Stage3Unit22
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMinX+64,GetClipMinY-16,1,90,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMinX+128,GetClipMinY-16,1,90,1);
}

task Stage3Unit23
{
let x=0;
	loop(2)//TQ
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMinX+64+x,GetClipMinY-16,1,100,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMinX+112+x,GetClipMinY-16,1,100,1);
	wait(60);
	x+=10;
	}
}

task Stage3Unit24
{
	loop(5)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy01.txt",GetClipMaxX-64,GetClipMinY-16,1,100,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetClipMaxX+16,GetClipMinY+64,4,175,1);
	wait(30);
	}
	
}

task Stage3Unit25
{
let x=0;
	loop(6)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX-64+x,GetClipMinY-16,1,80,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy03.txt",GetClipMaxX-112+x,GetClipMinY-16,1,80,1);
	wait(60);
	x-=10;
	}
}

task Stage3Unit26
{
	loop(5)
	{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy01.txt",GetClipMinX+64,GetClipMinY-16,1,80,1);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy09.txt",GetClipMinX-16,GetClipMinY+64,4,5,1);
	wait(30);
	}
	
}

task Stage3Unit27
{
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMaxX+32,GetClipMinY+100,1,150,1);
	wait(30);
	CreateEnemyFromFile(csd~"stage3/Stage3Enemy11.txt",GetClipMaxX+32,GetClipMinY+80,1,150,1);
	}